#include "board.h"

#include <esp_random.h>
#include <esp_log.h>

#define TAG "Board"

Board::Board() :
    test_button_(TEST_BUTTON_GPIO)
{
    InitializeButtons();
}

Board::~Board() = default;

std::string Board::GenerateUuid() {
    // UUID v4 需要 16 字节的随机数据
    uint8_t uuid[16];
    
    // 使用 ESP32 的硬件随机数生成器
    esp_fill_random(uuid, sizeof(uuid));
    
    // 设置版本 (版本 4) 和变体位
    uuid[6] = (uuid[6] & 0x0F) | 0x40;    // 版本 4
    uuid[8] = (uuid[8] & 0x3F) | 0x80;    // 变体 1
    
    // 将字节转换为标准的 UUID 字符串格式
    char uuid_str[37];
    snprintf(uuid_str, sizeof(uuid_str),
        "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
        uuid[0], uuid[1], uuid[2], uuid[3],
        uuid[4], uuid[5], uuid[6], uuid[7],
        uuid[8], uuid[9], uuid[10], uuid[11],
        uuid[12], uuid[13], uuid[14], uuid[15]);
    
    return std::string(uuid_str);
}

void Board::InitializeButtons()
{
    test_button_.OnClick([this]() {
        ESP_LOGI(TAG, "Button Clicked.");
    });
    test_button_.OnDoubleClick([this](){
        ESP_LOGI(TAG, "Button DoubleClicked.");
    });
    test_button_.OnLongPress([this](){
        ESP_LOGI(TAG, "Button LongPressed.");
    });
}